2026-09-24 · class-notes, a-plus, comptia, messer, hardware, memory, ecc, parity, multichannel
Full class notes for Professor Messer A+ 220-1201 objective 3.3: parity memory and even-parity calculation, ECC memory, memory bandwidth in MT/s, and multi-channel RAM.
Class notes · Professor Messer, CompTIA A+ 220-1201 Core 1 · Section 3, objective 3.3 (Memory Technologies)
Quick reference: the short version of this lesson is the Memory Technologies cheat sheet in A+ Core 1 section 3. It follows directly from the An Overview of Memory lesson in this section — that one covers what RAM is and how DDR moves data; this one covers how memory can detect or correct its own errors, and how to move more of it at once.
By the end of these notes you should be able to:
The memory installed in a computer can differ depending on what that system does. A home desktop typically runs perfectly well on standard memory. A system running something critical — a web server, a database server, or any other important service — may need memory with additional capabilities beyond the basics.
This lesson covers two of those capabilities — parity and ECC — plus a separate performance technique, multi-channel memory, that applies regardless of which memory type is installed.
Physically, standard memory, parity memory, and ECC memory modules are about the same size and look very similar. There is no way to tell them apart by sight — you have to check the module's actual specifications to know which type you are looking at.
Parity memory stores an extra parity bit alongside every byte written to memory. A byte is 8 bits; with the parity bit added, 9 bits are actually stored for each byte of data.
Parity memory can tell you that an error has occurred. It cannot always detect every possible error, and it cannot correct any error it does detect. When a parity error is found, the usual response is that the system halts and requires a full reboot — disruptive, but at least you are told a problem occurred and roughly where.
Most systems use even parity: the parity bit is chosen so that the total count of 1-bits, across the 8 data bits plus the parity bit, is always an even number.
The rule in practice:
Task: calculate the even-parity bit for each of these three bytes.
| Byte | 1-bits | Odd or even? | Parity bit |
|---|---|---|---|
1110 0111 |
6 | Even | 0 |
0000 0010 |
1 | Odd | 1 |
1001 1000 |
3 | Odd | 1 |
I checked each count directly: 11100111 has six 1-bits (already even, so parity 0); 00000010 has one 1-bit (odd, so parity 1); 10011000 has three 1-bits (odd, so parity 1). All three match the figures given in the lesson.
Note (beyond this lesson): the transcript's phrase "an entire terabyte of data, a byte being of course 8 bits in length" is very likely a transcription slip for "an entire byte of data" — the parity calculation described throughout this lesson operates on one byte (8 bits) at a time, not a terabyte, and everything else in the explanation is consistent with per-byte parity.
When data is later read from memory, the system:
+------------------------------------------------------------------------------+
| |
| WRITE READ |
| |
| [ 8 data bits ] [ 8 data bits read back ] |
| | | |
| v calculate parity v recalculate parity |
| [ parity bit ] --stored with the byte--> [ freshly calculated bit ] |
| | |
| v compare |
| match = byte OK, no error found |
| mismatch = an error occurred somewhere|
| |
+------------------------------------------------------------------------------+
Task: for each byte retrieved from memory, recalculate the expected even-parity bit and compare it against the parity bit actually stored, to determine whether an error occurred.
| Byte read | 1-bits | Expected parity | Stored parity | Result |
|---|---|---|---|---|
0000 0111 |
3 | 1 | 1 | Match — no error |
0000 0010 |
1 | 1 | 0 | Mismatch — error detected |
0110 0100 |
3 | 1 | 1 | Match — no error |
I recalculated all three: 00000111 has three 1-bits (odd, expected parity 1, and the stored parity was 1 — valid). 00000010 has one 1-bit (odd, expected parity 1, but the stored parity was 0 — an error is flagged). 01100100 has three 1-bits (odd, expected parity 1, matching the stored parity of 1 — valid). All three results match the lesson exactly.
Exam tip: parity can only tell you that an error happened — never what the correct data should have been. That is precisely the gap ECC closes.
ECC stands for Error Correction Code. Where parity only detects that something went wrong, ECC memory goes further: it can identify that an error occurred and correct it, allowing the system to continue running normally rather than halting.
ECC belongs in the same category as parity memory in the lesson's framing — memory with additional capability, aimed at systems where an undetected or uncorrected memory error would be a real problem: servers running web services, databases, or other important workloads.
Note (beyond this lesson): ECC achieves correction (not just detection) by storing more than a single parity bit — typically using a Hamming-code-based scheme that adds several extra bits per block of data, commonly 8 extra bits for every 64 bits of data (giving the 72-bit-wide ECC DIMM referenced in the An Overview of Memory lesson). That extra redundancy is what lets the system work out not just that an error happened, but which single bit was wrong and how to fix it. Most ECC implementations reliably correct single-bit errors and can at least detect (without correcting) some multi-bit errors.
As already noted, all three memory types look alike from the outside. The practical implication is that you cannot assume what you are looking at — a system's documentation, or the markings on the module itself, are what actually tell you whether it is standard, parity, or ECC memory. Installing the wrong type, where a motherboard specifically expects ECC, is a mistake that requires checking specifications rather than guessing from appearance.
An enormous amount of data moves between memory and the CPU continuously. Memory bandwidth measures how much of that data can move in a given amount of time, and it is a significant factor in overall system speed.
Memory data transfer rates are commonly expressed in MT/s — Mega Transfers per second, meaning millions of transfers each second. A memory module's specification sheet or retail listing will typically state this figure alongside its capacity — for example, a 32 GB DDR5 module might be listed as supporting 5,600 MT/s.
Exam tip: MT/s describes the number of data transfers per second, which is not automatically the same thing as a raw clock frequency — DDR memory (as covered in the An Overview of Memory lesson) transfers twice per clock cycle, so the MT/s figure already reflects that doubling.
If you want a faster system, increasing the data rate between CPU and memory is generally one of the levers available. But there is a practical ceiling: a single pathway between memory and CPU has a maximum total throughput, and once you are running data across that pathway as fast as it can go, that particular route cannot be sped up further without changing the approach.
While the CPU waits for data to travel from memory and back, it often has idle time — time it could, in principle, spend on other calculations, but cannot, because the bandwidth available on a single channel is not enough to keep up with everything a fast CPU could otherwise be doing.
The answer to a single channel's ceiling is to add additional channels between the CPU and memory. With more than one channel, the CPU can communicate with multiple memory modules simultaneously, which increases the system's overall memory throughput.
Motherboard documentation will state what channel configurations are supported:
| Configuration | Modules typically installed | Effect on throughput |
|---|---|---|
| Dual-channel | 2 (or a multiple of 2) | Can roughly double available throughput |
| Triple-channel | 3 (or a multiple of 3) | Can roughly triple available throughput |
| Quad-channel | 4 (or a multiple of 4) | Can roughly quadruple available throughput |
Two, three or four separate memory modules, installed correctly, increase the total memory bandwidth by roughly that same factor.
For multi-channel configurations to work well, the modules installed should match each other — ideally the same type, and ideally even the same make and model. Mismatched modules can still work in many cases, but matched modules are the safer and more predictable choice, and are what manufacturers actually validate against.
Motherboard manufacturers commonly help with this by colour-coding the memory slots. A board might have, for example, black slots and red slots representing two separate dual-channel groupings. To run in dual-channel mode, you install matched modules into slots of the same colour — mixing colours, or filling slots inconsistently, can mean the system falls back to single-channel operation even though the total memory capacity is unchanged.
+------------------------------------------------------------------------------+
| |
| Motherboard memory slots (simplified, dual-channel example) |
| |
| [ BLACK ] [ RED ] [ BLACK ] [ RED ] |
| A1 B1 A2 B2 |
| |
| Dual-channel: one module in a BLACK slot + one in a RED slot, |
| matched capacity and speed, engages both channels |
| |
| Filling only BLACK slots, or mismatching modules, |
| can leave the system running single-channel despite the total capacity |
| being unchanged |
| |
+------------------------------------------------------------------------------+
This is why systems are often shipped with, for example, two 16 GB modules rather than a single 32 GB module, even though the total installed memory is identical either way. Two matched modules across two channels provide additional throughput between CPU and memory that a single module — necessarily running on a single channel — cannot.
Scenario: a motherboard supports dual-channel memory, and you need to specify 32 GB total for a workstation build.
Error-detecting and error-correcting memory, and memory bandwidth generally, carry defender-relevant implications beyond raw performance.
| Term | Meaning |
|---|---|
| Parity memory | Memory storing an extra bit per byte to detect (not correct) errors |
| Parity bit | The extra bit added to make the total 1-bit count even (or odd) |
| Even parity | A parity scheme where the total count of 1-bits is always even |
| ECC | Error Correction Code; memory that detects and corrects errors |
| Memory bandwidth | The rate at which data can move between memory and the CPU |
| MT/s | Mega Transfers per second; the unit memory bandwidth is measured in |
| Channel | An independent data pathway between the CPU and a memory module |
| Dual/triple/quad-channel | Configurations using 2, 3, or 4 parallel memory channels |
| Matched modules | Memory modules of identical type (ideally make/model) for multi-channel use |
| Slot colour-coding | Motherboard colour scheme indicating which slots belong to which channel |
| Idle time | CPU time spent waiting on memory that could otherwise be used for work |
| Rowhammer | An attack technique that induces bit flips via repeated memory access |
1010 1010.1111 1110.0111 0001 with a stored parity bit of 0. Is this valid, or has an error occurred?01110001 has four 1-bits — already even — so the expected parity bit is 0. The stored parity bit is 0, so this is valid; no error.